Node 使用 CommonJS 模块规范,内置的 require 函数用具加载模块文件。
require 的基本功能是,读入并执行一个 JavaScript 文件,然后返回该模块的 export 对象,如果没有发现指定模块,会报错。内置 require 加载文件时可以省略扩展名,默认按JS文件执行。
简单实现 require 加载机制
为了弄清楚 commom.js 的运行机制,我们可以自己简单实现一下内部的模块加载机制:
commomModule.js如下:
1 |
|
module1.js:1
2
3
4
5
6
7
8
9
10var module2 = $require('./module2.js');
module.exports = {
a:{
say: () => {
console.log("module1 say")
}
},
b: module2
}
module2.js:1
2
3
4
5module.exports = {
say: () => {
console.log('module2 say');
}
}
输出结果为:
1 | module1 say |
以上就是 node 模块机制 require 的简单实现。
模块的缓存
第一次加载某个模块时,Node 会缓存该模块,以后再加载该模块,就直接从缓存中取出该模块的 module.exports 属性,不会再执行该模块
如果需要多次执行模块中的代码,一般可以让模块暴露行为(函数)
模块的缓存可以通过 require.cache 拿到,同样也可以删除
例如定时删除缓存:
1 | Object.keys(require.cache).forEach((key) => { |
在上面自定义的 require 中简单实现缓存机制:
1 |
|
完~